package ar.edu.unq.mongodbexample.homes;

import java.util.List; 

import ar.edu.unq.mongodbexample.model.Course;
import ar.edu.unq.mongodbexample.persistence.MongoDBManager;

import com.google.code.morphia.dao.BasicDAO;

public class CoursesHome extends BasicDAO<Course, Integer> implements IHome<Course>{
	public CoursesHome() {
        super(Course.class, MongoDBManager.getInstance().getDataStore());
        MongoDBManager.getInstance().getMorphia().map(Course.class);
	}
	/**
	 * Retorna la entidad con el id pasado como parametro
	 * @param idCourse
	 * @return
	 */
	public Course findById(Object id){
		return this.ds.get(Course.class, id);
	}
	/**
	 * Retorna la primera ocurrencia que coincida con el nombre pasado como parametro,
	 * en caso de no encontrar ninguna retorna null
	 * @param name
	 * @return
	 */
	public Course getByName(String name){
		List<Course> courses=this.ds.createQuery(Course.class).field("name").equal(name).asList();
		if (courses.size()>0)
			return this.ds.createQuery(Course.class).field("name").equal(name).asList().get(0);
		else
			return null;
	}
	
	/**
     * Persiste una coleccion de entidades y retorna el numero de entidades que fallaron al grabarse
     * @author CCEJAS
     */
    public int saveAll(List<Course> courses){
    	int notSaved=0;
    	for(Course course:courses){
    		try{
    			this.save(course);
    		}
    		catch (Exception e) {
				notSaved=notSaved+1;
			}
    	}
    	return notSaved;
    }
    
    /**
     * Retorna todas las entidades
     * @author CCEJAS
     */
    public List<Course> getAll(){
		return ds.find(Course.class).asList();
    }
}
